OAuth2 (Open Authorization 2.0) হল একটি জনপ্রিয় অথেন্টিকেশন এবং অথরাইজেশন প্রোটোকল যা বিশেষ করে Third-party Authentication (যেমন Google, Facebook, GitHub) জন্য ব্যবহৃত হয়। Spring Security OAuth2 ব্যবহার করে আপনি খুব সহজে OAuth2 ভিত্তিক Authentication এবং Authorization কনফিগার করতে পারেন।
এই গাইডে, আমরা দেখব কিভাবে Spring Security এবং OAuth2 ইন্টিগ্রেশন করা যায় এবং ব্যবহারকারীরা কীভাবে Google এর মাধ্যমে লগইন করতে পারে।
১. Maven ডিপেনডেন্সি
আপনার pom.xml-এ Spring Security OAuth2 এবং Spring Boot Starter Web এর জন্য ডিপেনডেন্সি যোগ করতে হবে।
<dependencies>
<!-- Spring Security OAuth2 Client Dependency -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<!-- Spring Boot Web Dependency for the Web app -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Security for Security Configuration -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
২. application.yml বা application.properties কনফিগারেশন
OAuth2 ইন্টিগ্রেশন করার জন্য আপনাকে আপনার OAuth2 provider (যেমন Google, Facebook) থেকে Client ID এবং Client Secret নিতে হবে। এখানে আমরা Google OAuth2 উদাহরণ দেব।
application.yml কনফিগারেশন:
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_GOOGLE_CLIENT_ID
client-secret: YOUR_GOOGLE_CLIENT_SECRET
scope: profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
user-name-attribute: id
client-idএবংclient-secretআপনি Google Developers Console থেকে পাবেন।scopeব্যবহারকারীর প্রোফাইল এবং ইমেইল এক্সেসের জন্য।redirect-uriহলো সেই URL যেখানে OAuth2 প্রক্রিয়া শেষে ব্যবহারকারীকে রিডাইরেক্ট করা হবে।
৩. Spring Security কনফিগারেশন
Spring Security কনফিগারেশনে OAuth2 authentication প্রক্রিয়া সক্রিয় করতে হবে। SecurityConfig.java ফাইলে নিচের কনফিগারেশন করা যেতে পারে:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.client.oidc.userinfo.OidcUserService;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.registration.OAuth2AuthorizationCodeGrantRequestEntityConverter;
import org.springframework.security.oauth2.client.registration.OAuth2LoginAuthenticationProvider;
import org.springframework.security.oauth2.client.registration.OAuth2LoginAuthenticationFilter;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login", "/error").permitAll() // লগইন পেজ এবং এরর পেজ সবার জন্য উন্মুক্ত
.anyRequest().authenticated() // অন্যান্য রিকোয়েস্টের জন্য অথেন্টিকেশন প্রয়োজন
.and()
.oauth2Login() // OAuth2 Login সক্রিয়
.loginPage("/login") // কাস্টম লগইন পেজ
.failureUrl("/error"); // লগইন ব্যর্থ হলে রিডাইরেক্ট করা হবে
return http.build();
}
}
- এখানে,
oauth2Login()মেথড OAuth2 লগইন কনফিগার করে। আপনিloginPage()ওfailureUrl()মেথড দিয়ে কাস্টম লোগিন এবং এরর পেজও নির্ধারণ করতে পারেন।
৪. Google OAuth2 লগইন ইউআরএল সেট করা
ব্যবহারকারীদের লগইন করতে একটি লিংক তৈরি করতে পারেন:
@Controller
public class LoginController {
@GetMapping("/login")
public String loginPage() {
return "login"; // Custom login page view
}
@GetMapping("/login-success")
public String loginSuccessPage() {
return "login-success"; // Success page after login
}
@GetMapping("/error")
public String errorPage() {
return "error"; // Error page if login fails
}
}
- এখানে,
/loginহল কাস্টম লগইন পেজ যেখানে ইউজারকে লগইন করতে বলা হবে। /login-successহল সাফল্যের পেজ যেখানে লগইন সফল হলে ইউজার যাবে।/errorপেজটি ত্রুটি ক্ষেত্রে ব্যবহার হবে।
৫. OAuth2 UserDetailsService কনফিগারেশন
Google OAuth2 প্রোভাইডার থেকে প্রাপ্ত ইউজার তথ্য পেতে OAuth2UserService ব্যবহার করা হবে:
import org.springframework.security.oauth2.client.userinfo.OAuth2UserService;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;
@Service
public class CustomOAuth2UserService implements OAuth2UserService<OAuth2UserRequest, OAuth2User> {
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
OAuth2User oAuth2User = super.loadUser(userRequest);
// Customize the user object by extracting details from OAuth2User
String username = oAuth2User.getAttribute("name");
String email = oAuth2User.getAttribute("email");
return new User(username, email, Collections.emptyList());
}
}
এখানে OAuth2User অবজেক্ট থেকে ইউজারের তথ্য বের করে, যেমন name, email ইত্যাদি।
৬. HTML পেজ কনফিগারেশন
কাস্টম লোগিন পেজ তৈরি করতে পারেন যেখানে ইউজারকে Google Login বাটন দেখানো হবে।
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<a href="/oauth2/authorization/google">Login with Google</a>
</body>
</html>
এটি একটি সাধারণ HTML পেজ, যেখানে Google OAuth2 লগইন বাটন দেওয়া হয়েছে। ক্লিক করলে Google OAuth2 Login পেজে রিডাইরেক্ট করা হবে।
৭. লগইন সফল হলে ইউজারের তথ্য পাওয়া
ব্যবহারকারীর তথ্য পাওয়ার জন্য Spring Security OAuth2 ব্যবহার করতে পারেন।
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user")
public String userInfo() {
OAuth2User principal = (OAuth2User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return "User Info: " + principal.getAttributes();
}
}
এটি লগইন করা ব্যবহারকারীর তথ্য (যেমন নাম, ইমেইল) প্রদর্শন করবে।
উপসংহার
Spring Security-এর সাহায্যে OAuth2 ইন্টিগ্রেশন একটি সহজ ও নিরাপদ প্রক্রিয়া যা আপনাকে বিভিন্ন OAuth2 প্রদানকারীর (যেমন Google, Facebook) মাধ্যমে ব্যবহারকারীকে লগইন করতে সহায়তা করে। এইভাবে আপনি আপনার অ্যাপ্লিকেশনে Single Sign-On (SSO) সমর্থন করতে পারেন।
Read more